package com.gitee.huanminabc.jcommon.str;


/**
 * 简要描述
 *
 * @Author: mac
 * @Date: 2025/4/3 12:22
 * @Version: 1.0
 * @Description: 文件作用详细描述....
 */
public class StringIdentifyUtil {
    //判断是否是数字包括负数  是返回true 不是返回false
    public static boolean isNumeric(String str) {
        if (str == null || str.isEmpty()) {
            return false;
        }
        //截取掉-号
        if (str.startsWith("-")) {
            str = str.substring(1);
        }
        for (int i = str.length(); --i >= 0; ) {
            if (!Character.isDigit(str.charAt(i))) {
                return false;
            }
        }
        return true;
    }

    //判断是否是正数字
    public static boolean isPositiveNumeric(String str) {
        if (str == null || str.isEmpty()) {
            return false;
        }
        //截取掉-号
        if (str.startsWith("-")) {
            return false;
        }
        for (int i = str.length(); --i >= 0; ) {
            if (!Character.isDigit(str.charAt(i))) {
                return false;
            }
        }
        return true;
    }

    //判断是否都是字符  是返回true 不是返回false
    public static boolean isLetter(String str) {
        if (str == null || str.isEmpty()) {
            return false;
        }
        for (int i = str.length(); --i >= 0; ) {
            if (!Character.isLetter(str.charAt(i))) {
                return false;
            }
        }
        return true;
    }

    //判断是否是小数包括负数  是返回true 不是返回false
    public static boolean isDecimal(String str) {
        if (str == null || str.isEmpty()) {
            return false;
        }
        if (str.startsWith("-")) {
            str = str.substring(1);
        }
        for (int i = str.length(); --i >= 0; ) {
            if (!Character.isDigit(str.charAt(i)) && str.charAt(i) != '.') {
                return false;
            }
        }
        return true;
    }

    //判断是否是特殊字符(除了字母和数字之外的符号都是特殊字符)  是返回true 不是返回false
    public static boolean isSpecial(String str) {
        if (str == null || str.isEmpty()) {
            return false;
        }
        for (int i = str.length(); --i >= 0; ) {
            if (Character.isLetterOrDigit(str.charAt(i))) {
                return false;
            }
        }
        return true;
    }

    //判断是否是字母和数字组成的字符串  是返回true 不是返回false
    public static boolean isLetterOrDigit(String str) {
        if (str == null || str.isEmpty()) {
            return false;
        }
        for (int i = str.length(); --i >= 0; ) {
            if (!Character.isLetterOrDigit(str.charAt(i))) {
                return false;
            }
        }
        return true;
    }

    //判断字符串是否是布尔值  是返回true 不是返回false
    public static boolean isBoolean(String str) {
        return "true".equals(str) || "false".equals(str);
    }

    // 判断字符串是,数字,字母,小数,数字返回1,字母返回2,小数返回3,其他返回0
    public static int isNumberOrLetterOrDecimal(String str) {
        if (isNumeric(str)) {
            return 1;
        } else if (isLetter(str)) {
            return 2;
        } else if (isDecimal(str)) {
            return 3;
        } else {
            return 0;
        }
    }

    //判断字符是否是中文
    public static boolean isChineseUsingUnicodeScript(char c) {
        Character.UnicodeScript script = Character.UnicodeScript.of(c);
        return script == Character.UnicodeScript.HAN;
    }

    //判断字符串是否是中文
    public static boolean isChinese(String str) {
        char[] chars = str.toCharArray();
        for (char c : chars) {
            if (isChineseUsingUnicodeScript(c)) {
                return true;
            }
        }
        return false;
    }


    //识别字符串类型
    public static Class<?> strType(String str) {
        if (isNumeric(str)) {
            if (str.contains(".")) {
                return Double.class;
            }
            return Integer.class;
        }
        if (isBoolean(str)) {
            return Boolean.class;
        }
        return String.class;
    }



}
